package com.common.mybaits;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * @author 大忽悠
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Slf4j
public class CustomPage {
    /**
     * 如果下面的属性小于0,表示前端未传值给后方,此次查询不启用分页查询
     */
    @ApiModelProperty("第几页")
    private Integer pageNum=-1;
    @ApiModelProperty("一页多少条数据")
    private Integer pageSize=-1;

    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * @return 是否启用分页查询
     */
    public static Boolean enable(CustomPage customPage){
        return customPage!=null&&customPage.pageNum!=null&&customPage.pageSize!=null&&customPage.pageNum>=0&&customPage.pageSize>=0;
    }

    /**
     * @param pageType 分页查询使用到的数据类型
     * @param queryWrapper 查询条件
     * @param iService 查询服务类
     * @param <T>  返回数据集合中的数据类型
     * @return 返回查询到的集合
     */
    public static <T> List<T> getResult(CustomPage customPage,T pageType, IService iService, QueryWrapper queryWrapper){
        List<T> res=null;
        if(enable(customPage)){
            res=iService.page(PageFactory.newPage(pageType,customPage),queryWrapper).getRecords();
        }else {
            res=iService.list(queryWrapper);
        }
        return res;
    }
}
